#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "hash.h"


//创建hash表
hash * hash_create(){
	hash * h = (hash *)malloc(sizeof(hash));
	if(h == NULL){
		return NULL;
	}
	memset(h, 0, sizeof(hash));
	return h;
}
//往hash表插入元素
int hash_insert(hash *h, datatype key){
	linklist p, q;
	if(h == NULL){
		return -1;
	}
	//新建一个节点
	if((p = (linklist)malloc(sizeof(listnode))) == NULL){
		printf("init listnode failed\n");
		return -1;
	}
	p->key = key;
	p->value = key % N;
	p->next = NULL;
	//遍历到节点插入位置，链表需要从小到大放置
	q = &(h->data[key % N]);
	while(q->next && q->next->key <= key){
		q = q->next;
	}
	//插入新增元素
	p->next = q->next;
	q->next = p;
	return 0;
}
//hash查找
linklist  hash_search(hash *h, datatype key){
	linklist p;
	if(h == NULL){
		return NULL;
	}
	//1. 找到在哪个位置上
	p = &(h->data[key % N]);

	//2. 找到循环终止条件
	while(p->next != NULL && p->next->key < key){
		p = p->next;
	}
	//3.遍历到最后一个元素 或 不等时，就是没找到
	if(p->next == NULL || p->next->key != key){
		return NULL;
	}
	return p->next;

	/*
	while(p->next && p->next->key != key){
		p = p->next;
	}
	if(p->next == NULL){
		return NULL;
	}else{
		return p->next;
	}
	*/
}
